package io_0929;

import java.io.*;

/**
 * Created with IntelliJ IDEA.
 * Description: 进行写文件
 *
 * void write(int b) 写入要给字节的数据 (写一个字节)
 * void write(byte[] b) 将 b 这个字符数组中的数据全部写入 文件 中
 * int write(byte[] b, int off, int len)  将 b 这个字符数组中从 off 开始的数据写入 文件 中，一共写 len 个
 * void close() 关闭字节流
 *
 * void flush() :
 * 重要：我们知道 I/O 的速度是很慢的，所以，大多的 OutputStream 为
 * 了减少设备操作的次数，在写数据的时候都会将数据先暂时写入内存的
 * 一个指定区域里，直到该区域满了或者其他指定条件时才真正将数据写
 * 入设备中，这个区域一般称为缓冲区。但造成一个结果，就是我们写的
 * 数据，很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置，
 * 调用 flush（刷新）操作，将数据刷到设备中。
 */
public class Demo1 {
    public static void main(String[] args) throws IOException {
        // 类似于打开文件
        // 使用 OutputStream 打开文件 就会把文件的原有内容清空!
        OutputStream file = new FileOutputStream("./bbb.txt");

        // 写文件
        file.write(97); // a
        file.write(98); // b
        file.write(99); // c

        file.close();


        // 读文件: 只有 a b c
        InputStream inputStream = new FileInputStream("./bbb.txt");
        while(true) {
            int b = inputStream.read();
            if(b == -1) break;
            System.out.print(b + ":");
            System.out.print((char)b + "  ");
        }

        // 关闭文件
        inputStream.close();
    }
}
